"use strict";

const Controller = require("egg").Controller;

class HomeController extends Controller {
    async index() {
        const { ctx } = this;
        ctx.body = "hi, egg";
    }

    /**
     * 获取验证码
     */
    async code() {
        // 获取查询参数
        const { mobile } = this.ctx.query;
        // 非空校验
        if (!mobile || !/^1[3589]\d{9}$/.test(mobile)) {
            this.ctx.body = {
                code: 400,
                message: "手机号不合法",
            };
            return;
        }
        // 检查收据库，看看该手机号验证码存不存在
        await this.service.code.remove(mobile);
        // 生成验证码
        const code = Math.floor(Math.random() * 1000000);
        // 保存到数据库
        const res = await this.service.code.create(mobile, code);
        // 判断是否插入成功
        if (res.affectedRows !== 1) {
            this.ctx.body = {
                code: 500,
                message: "生成验证码失败",
            };
            return;
        }
        // 成功响应
        this.ctx.body = {
            code: 200,
            message: "请求成功",
        };
    }

    /**
     * 登录
     */
    async login() {
        const { mobile, code } = this.ctx.request.body;
        if (!mobile || !code) {
            this.ctx.body = {
                code: 400,
                message: "缺少必须参数",
            };
            return;
        }
        // 查询验证码
        let res = await this.service.code.find(mobile);
        if (!res) {
            this.ctx.body = {
                code: 400,
                message: "请先获取验证码",
            };
            return;
        }
        // 校验验证码是否正确
        if (res.code !== code) {
            this.ctx.body = {
                code: 400,
                message: "验证码不正确",
            };
            return;
        }
        // 用户是否存在
        let user = await this.service.user.findByMobile(mobile);
        if (!user) {
            // 注册
            res = await this.service.user.create(mobile);
            if (res.affectedRows !== 1) {
                this.ctx.body = {
                    code: 500,
                    message: "登录失败",
                };
                return;
            }
            user = await this.service.user.findByMobile(mobile);
        }
        // 生成 token
        const token = this.ctx.helper.genToken({ ...user });
        // 完成注册
        this.ctx.body = {
            code: 200,
            data: {
                user,
                token,
            },
            message: "登录成功",
        };
    }
}

module.exports = HomeController;
